﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
//int main() {
//	if (1)
//		printf("hehe");
//	return 0;
//}

//while和if语句一样，如果想要在里面执行多条语句的时候，需要带上大括号
//#include<stdio.h>
//int main() {
//	while (1)
//		printf("hehe");
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	int i = 1;            //初始化
//	while (i <= 10) {     //判断
//		printf("%d ", i);
//		i++;              //调整
//	}
//	return 0;
//}


//输⼊⼀个正的整数，逆序打印这个整数的每⼀位
//例如：
//输⼊：1234，输出：4321
// 1234%10 = 123...4
// 1234/10 = 123
// 123%10 = 12 ....3
// 123/10 = 12
// 12 % 10 = 1.....2
// 12 / 10 = 1
// 1 % 10 = 0......1
// 1 / 10 = 0
//输⼊：521，输出：125
//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	while (num)//123
//	{
//		printf("%d ", num % 10);
//		num = num / 10;
//	}
//	return 0;
//}
//关于上述123倒序输出3 2 1的解释
//模10除10的方式来使一个数字倒叙输出
//123 % 10 = 12 .. 3
//123 / 10 = 12
//12 % 10 = 1 .....2
//12 / 10 = 1
// 1 % 10 = 0 .....1
// 1 / 10 = 0



//#include<stdio.h>
//int main()
//{
//	for (int i = 1; i <= 100; i++) {
//		printf("%d ", i);
//	}
//	return 0;
//}


//计算1~100之间3的倍数的数字之和
//#include<stdio.h>
//int main()
//{
//	int sum = 0;
//	for (int i = 3; i <= 100; i++)
//	{
//		if (i % 3 == 0) {
//			sum = sum + i;
//		}
//	}
//	printf("%d", sum);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int sum = 0;
//	int i = 3;
//	while(i <= 100)
//	{
//		if (i % 3 == 0) {
//			sum = sum + i;
//		}
//		i = i + 3;
//	}
//	printf("%d", sum);
//	return 0;
//}



//下面这个的while的判断的效率比上面的while循环的判断效率高
//因为判断的次数使上方的判断次数的1/3*100次
//#include<stdio.h>
//int main()
//{
//	int sum = 0;
//	int i = 3;
//	while (i <= 100)
//	{
//		sum = sum + i;
//		i = i + 3;
//	}
//	printf("%d", sum);
//	return 0;
//}




//在屏幕上打印1~10的值
//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	do
//	{
//		printf("%d ", i);
//		i++;
//	} while (i <= 10);
//	return 0;
//}




//输⼊⼀个正整数，计算这个整数是⼏位数？
//例如：
//输⼊：1234 输出：4
//输⼊：12 输出：2
//给每个输入的数字除以10即可，这样子每次加加就能够算出这个数字究竟有多少位
//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	int i = 0;
//	scanf("%d", &num);
//	do {
//		i++;
//		num = num / 10;
//	} while (num);
//	printf("%d", i);
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	int i = 0;
//	scanf("%d", &num);
//	while (num != 0 ) { 
//		num = num / 10;
//		i++;
//	}
//	if (num == 0)
//		i = 1;
//	printf("%d", i);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int num = 0;
//	int i = 0;
//	scanf("%d", &num);
//	for (i = 0; num != 0; i++)
//	{
//		num = num / 10;
//	}
//	if (i == 0)
//		i = 1;
//	printf("%d", i);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{
//		if (i == 5)
//			break;
//		printf("%d ", i);
//		i++;
//	}
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{                  //这块没有机会跳过死循环了，因为i得不到任何调整
//		if (i == 5)    //这段代码是打印完1234之后陷入死循环了 
//			continue;  //跳过本次循环后面的代码
//		printf("%d ", i); //1 2 3 4
//		i++;
//	}
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{
//		i++;            //这块有机会调整死循环，5这个数字被跳了过去，因为i可以调整
//		if (i == 5)    
//			continue;  //跳过本次循环后面的代码
//		printf("%d ", i);// 2 3 4 6 7 8 9 10 11
//	}
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	for (int i = 1; i <= 10; i++)
//	{
//		if (i == 5)
//			break;
//		printf("%d ", i);
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	for (int i = 1; i <= 10; i++)
//	{
//		if (i == 5)   // 这块有机会调整死循环  因为i有机会调整
//			continue; //1 2 3 4 6 7 8 9 10
//		printf("%d ", i);
//	}
//	return 0;
//}


// for循环里面的continue跳过它后面的部分之后会对i进行调整，所以不容易造成死循环
// while里面的continue会跳过它后面的部分，但如果i在它的后面的话，i得不到调整，容易造成死循环



//#include<stdio.h>
//int main()
//{
//	for (int i = 1; i <= 10;) //这个里面的参数有的可以不写，这块的调整可以不写，但是这是bug
//	{
//		if (i == 5)   // 这块有机会调整死循环  因为i有机会调整
//			continue; //1 2 3 4 6 7 8 9 10
//		printf("%d ", i);
//		i++;
//	}
//	return 0;
//}

//for循环的初始化，判断，调整三个部分都是可以省略的
//如果判断部分被省略，那么判断部分就恒为真，就会造成死循环
//#include<stdio.h>
//int main()
//{
//	for (;;)
//		printf("hehe"); //死循环打印hehe
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	如果省略掉i<=10就变成死循环了
//	for (;i<=10;i++)//这块的初始化因为上面的int i=0，所以可以省略掉括号里面的
//		printf("hehe"); //死循环打印hehe
//	return 0;
//}






//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	//如果省略掉i<=10就变成死循环了
//	for (;; i++)//这块的初始化因为上面的int i=0，所以可以省略掉括号里面的
//		printf("hehe"); //死循环打印hehe
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	do {
//		if (i == 5)
//			break;
//		printf("%d ", i);  //1 2 3 4
//		i++;
//	} while (i <= 10);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int i = 1;
//	do {
//		if (i == 5)
//			continue;
//		printf("%d ", i);  // 1 2 3 4 后面是光标闪烁，陷入死循环了
//		i++;
//	} while (i <= 10);
//	return 0;
//}



//当一个条件发生的时候想让这个循环彻底终止，不再循环，就用break
//当一个条件发生，这次不做了，以后还要做的时候，就用continue
//continue只是在众多次循环中，跳过某一次后面的代码



//找出100~200之间的素数，并打印在屏幕上。
//注：素数⼜称质数，只能被1和本⾝整除的数字。
//拿2~i-1之间的数字，去试除i
//如果2~i-1之间有数字能整除i,那么i就不是素数
//如果2~i-1之间所有的数字都不能整除i，i就是素数
//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	for (i = 100; i <= 200; i++)
//	{
//		int flag = 1;//假设i是素数
//		//每次循环产生一个i
//		//判断i是否是素数
//		//使用循环产生2~i-1之间的数字
//		int j = 0;
//		for (j = 2; j <= i - 1; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;//i不是素数
//				break;//假设100的话我们找的是2~99,但是我们2都可以整除100了，后面的数字就不需要判断了
//			}
//		}
//		if (flag == 1)//i是素数
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	int i = 0;
//	for (i = 101; i <= 200; i+=2)//偶数不可能是素数，所以在源头上改变后数据相当于少了一半
//	{
//		int flag = 1;//假设i是素数
//		//每次循环产生一个i
//		//判断i是否是素数
//		//使用循环产生2~i-1之间的数字
//		int j = 0;
//		for (j = 2; j <= i - 1; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;//i不是素数
//				break;//假设100的话我们找的是2~99,但是我们2都可以整除100了，后面的数字就不需要判断了
//			}
//		}
//		if (flag == 1)//i是素数
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}




//m=a*b那么，a和b中至少有一个数字是小于等于根号m的
//这样写的话效率又得到了提升
#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	for (i = 101; i <= 200; i += 2)//偶数不可能是素数，所以在源头上改变后数据相当于少了一半
	{
		int flag = 1;//假设i是素数
		//每次循环产生一个i
		//判断i是否是素数
		//使用循环产生2~i-1之间的数字
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)//sqrt就是开平方的意思，要包含头文件,math.h
		{
				if (i % j == 0)
			{
				flag = 0;//i不是素数
				break;//假设100的话我们找的是2~99,但是我们2都可以整除100了，后面的数字就不需要判断了
			}
		}
		if (flag == 1)//i是素数
		{
			printf("%d ", i);
		}
	}
	return 0;
}



//#include<stdio.h>
//int main()
//{
//again:
//	printf("hehe\n");
//	printf("haha\n");
//	goto again;
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	printf("hehe\n");
//	goto next;    //goto后面的名字可以随便换
//	printf("haha\n");
//	
//next:
//	printf("heihei");
//	return 0;
//}



//写一个关机的程序
//程序运行起来之后，你的电脑在1min内关机
//但是如果输入：我是猪，就取消关机

//在cmd里面输入shutdown -s -t 60意思在60s后进行关机
// shutdown关机
// -s设置关机
// -t倒计时关机
// 60 表示倒计时60秒后关机
//不想让在60s后关机就再输入shutdown -a就取消关机了

//system函数可以执行系统命令

//#include<stdio.h>
//#include<string.h>
//#include<stdlib.h>
//int main()
//{
//	char input[20] = { 0 };
//	//关机
//	system("shutdown -s -t 60");
//	again:
//	printf("请注意，你的电脑在一分钟内关机，如果输入：我是猪，就取消关机\n");
//	//输入
//	scanf("%s", input);
//	//判断输入的正确性
//	//两个字符串比较相等不能使用==，应该使用strcmp函数
//	if (strcmp(input ,"我是猪") == 0)//若这两个相等了就会返回0
//	{
//		system("shutdown -a");//取消关机
//	}
//	else
//	{
//		goto again;
//	}
//	return 0;
//}


//#include<stdio.h>
//#include<string.h>
//#include<stdlib.h>
//int main()
//{
//	char input[20] = { 0 };
//	//关机
//	system("shutdown -s -t 60");
//	while (1)
//	{
//		printf("请注意，你的电脑在一分钟内关机，如果输入：我是猪，就取消关机\n");
//		//输入
//		scanf("%s", input);
//		//判断输入的正确性
//		//两个字符串比较相等不能使用==，应该使用strcmp函数
//		if (strcmp(input, "我是猪") == 0)//若这两个相等了就会返回0
//		{
//			system("shutdown -a");//取消关机
//			break; //这里的break会跳出离它最近的循环，也就是这段代码里面的while循环
//		}
//		return 0;
//	}
//}